package sort;

/**
 * 各类排序算法的工具类
 *
 * @author zj
 */
public class SortUtils {
    /**
     * 直接插入排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void insertSort(T arr[]) {
        System.out.println("SortUtils.insertSort");
        new InsertSort<T>().sort(arr);
    }

    /**
     * 冒泡排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void bubbleSort(T arr[]) {
        System.out.println("SortUtils.bubbleSort");
        new BubbleSort<T>().sort(arr);
    }

    /**
     * 简单选择排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void selectSort(T arr[]) {
        System.out.println("SortUtils.selectSort");
        new SelectSort<T>().sort(arr);
    }

    /**
     * 希尔排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void shellSort(T arr[]) {
        System.out.println("SortUtils.shellSort");
        new ShellSort<T>().sort(arr);
    }

    /**
     * 快速排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void quickSort(T arr[]) {
        System.out.println("SortUtils.quickSort");
        new QuickSort<T>().sort(arr);
    }

    /**
     * 堆排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void heapSort(T arr[]) {
        System.out.println("SortUtils.heapSort");
        new HeapSort<T>().sort(arr);
    }

    /**
     * 二路归并排序
     *
     * @param arr
     */
    public static <T extends Comparable<T>> void mergeSort(T arr[]) {
        System.out.println("SortUtils.mergeSort");
        new MergeSort<T>().sort(arr);
    }

    /**
     * 计数排序
     *
     * @param arr
     */
    public static void countingSort(int arr[]) {
        System.out.println("SortUtils.countingSort");
        new CountingSort().sort(arr);
    }
}
